#include <stdio.h>

int isLeapYear(int year);

/**
 * 题目：输入某年某月某日，判断这一天是这一年的第几天？
 * 程序分析：以3月5日为例，应该先把前两个月的加起来，然后再加上5天即本年的第几天，
 * 特殊情况，闰年且输入月份大于3时需考虑多加一天。
*/
int main(int argc, char const *argv[])
{
    int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int year, month, day;
    int num=0, i;

    printf("请输入年：");
    scanf("%d", &year);
    if (year>9999 && year<=0)    
    {
        printf("年份不合法，请输入正确的年份。\n");
        return 1;
    }

    printf("请输入月：");
    scanf("%d", &month);
    if (month<1 || month>12)
    {
        printf("月份不合法，请输入1～12之间的数字。\n");
        return 1;
    }
    
    printf("请输入日：");
    scanf("%d", &day);
    if (day<1 || day>days[month-1]) 
    {
        printf("日份不合法，请输入有效的日份");
        return 1;
    }
    

    for (i = 0; i < month - 1; i++)
    {
        num += days[i];
    }
    
    num += day;

    if (isLeapYear(year))
    {
        num+=1;
    }
    
    printf("%d-%d-%d是这一年的第%d天\n", year, month, day, num);

    return 0;
}

// 闰年的判断规则：能被4整除且（不能被100整除或能被400整除）
int isLeapYear(int year)
{
    if ((year %4 == 0 && year % 100 != 0) || (year % 400 == 0))
    {
        return 1;
    }
    
    return 0;
}